/**
 * 错误处理工具函数
 */

import { error, success, warning, info } from './alert'


/**
 * 处理API响应错误
 * @param {Error} error - 错误对象
 * @param {string} defaultMessage - 默认错误消息
 */
export const handleApiError = (error, defaultMessage = '操作失败，请稍后重试') => {
  console.error('API错误:', error)
  
  // 处理表单验证错误
  if (error.name === 'ValidationError') {
    // Element Plus会自动显示表单验证错误
    return
  }
  
  // 处理后端返回的错误信息
  if (error.response && error.response.data) {
    const errorData = error.response.data
    
    // 根据错误代码显示特定消息
    switch (errorData.errorCode) {
      case 'AVATAR_TOO_LARGE':
        error('头像数据过大，请选择更小的图片或降低图片质量')
        break
      case 'DUPLICATE_DATA':
        error('数据重复，请检查输入信息')
        break
      case 'UNAUTHORIZED':
        error('登录已过期，请重新登录')
        // 可以在这里添加跳转到登录页的逻辑
        break
      case 'FORBIDDEN':
        error('权限不足，无法执行此操作')
        break
      case 'NOT_FOUND':
        error('请求的资源不存在')
        break
      case 'SERVER_ERROR':
        error('服务器错误，请稍后重试')
        break
      default:
        // 使用后端返回的错误消息
        if (errorData.message) {
          error(errorData.message)
        } else {
          error(defaultMessage)
        }
    }
  } else if (error.message) {
    // 处理网络错误和其他错误
    if (error.message.includes('Network Error')) {
      error('网络连接失败，请检查网络连接后重试')
    } else if (error.message.includes('timeout')) {
      error('请求超时，请稍后重试')
    } else {
      error(error.message)
    }
  } else {
    error(defaultMessage)
  }
}

/**
 * 处理用户信息更新错误
 * @param {Error} error - 错误对象
 */
export const handleProfileUpdateError = (error) => {
  handleApiError(error, '个人信息更新失败，请稍后重试')
}

/**
 * 处理登录错误
 * @param {Error} error - 错误对象
 */
export const handleLoginError = (error) => {
  handleApiError(error, '登录失败，请检查账号密码')
}

/**
 * 处理注册错误
 * @param {Error} error - 错误对象
 */
export const handleRegisterError = (error) => {
  handleApiError(error, '注册失败，请稍后重试')
}

/**
 * 处理帖子相关错误
 * @param {Error} error - 错误对象
 * @param {string} operation - 操作类型（如：'创建'、'获取'、'点赞'等）
 */
export const handlePostError = (error, operation = '操作') => {
  handleApiError(error, `${operation}失败，请稍后重试`)
}

/**
 * 显示成功消息
 * @param {string} message - 成功消息
 */
export const showSuccess = (message) => {
  success(message)
}

/**
 * 显示警告消息
 * @param {string} message - 警告消息
 */
export const showWarning = (message) => {
  warning(message)
}

/**
 * 显示信息消息
 * @param {string} message - 信息消息
 */
export const showInfo = (message) => {
  info(message)
}